/* 
    1.如何实现收集组件的状态
    2.如何对数组的数据进行校验
    3.如何更新组件的数据
    4.如何跨层级传递
    5.表单提交
*/
/* 
    Form:
    状态保存：管理整个表单的状态 这个状态包括具体表单控件的value,以及获取表单
    提交表单 重置表单 验证表单的方法
    状态下发：Form 不仅仅要管理状态 而且还要下发传递这些状态 把这些状态下发每一个FormItem，由于
    考虑到Form 和 FormItem 有可能深层次的嵌套，所以选择通过 React context 保存下发状态
    保存原生 form 功能：Form 满足上诉两点功功能外 还要和原生的 form 的功能保持一致性

    FormItem:
    状态收集：收集表单的状态，传递给 Form 组件 比如属性名，属性值 验证规则等
    控制表单组件：还有一个功能就是 将 FormItem 包裹的组件变成受控的，一方面能够自由传递
    value 给表单控件 另一方面，能够劫持表单控件的  change 事件，得到最新的value ，上传状态
    提供 label 和验证结果的 UI 层： FormItem 还有一个作用就是要提供表单单元项的标签 label 
    如果校验不通过的情况下，需要展示错误信息 UI 样式

    表单控件：
    首先表单控件一定是与上诉整个表单验证系统零耦合的，也就是说 Input 等控件脱离整个表单验证系统，可以
    单独使用
    在表单系统中，表单控件，不需要自己绑定事件，统一托管于 FormItem 处理
*/

import Form from './component/Form'
import FormItem from './component/FormItem'
import Input from './component/Input'
import Select from './component/Select'

Form.FormItem = FormItem
export { FormItem, Input, Select }
export default Form
